package rest;

import java.util.Collection;

import javax.ws.rs.Path;
import javax.ws.rs.PUT;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PathParam;
import javax.ws.rs.FormParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import SOAPVO.PersonaSOAPVO;

/**
 * 
 * @author
 */
@Path("/persona")
public class PersonaSOA {

	/**
	 * 
	 * @param rut, cuerpo del rut de una persona.
	 * @param verificador, digito verificador de dicho rut.
	 * @param nombre, nombre de persona.
	 * @return message, devuelve el resultado de la operacion que se realizo.
	 */
	@POST
	@Path("/add")
	@Produces(MediaType.TEXT_PLAIN)
	public static  String add(@FormParam("rut") String rut,
			@FormParam("verificador") String verificador,
			@FormParam("nombre") String nombre, @FormParam("sexo") String sexo) {

		return negocio.PersonaSOA.add(rut, verificador, nombre, sexo);

	}

	/**
	 * Metodo que sirve para borrar un registro en la BD segun sea su rut.
	 * 
	 * @param rut
	 *            , rut de la persona que se desea borrar.
	 * @return message, resultado de la operacion.
	 */
	@DELETE
	@Path("/delete/{rut}")
	public static String borrar(@PathParam("rut") String rut) {
		return negocio.PersonaSOA.borrar(rut);
	}

	@GET
	@Path("/graficar")
	@Produces(MediaType.APPLICATION_JSON)
	public static int[] graficar() {
		return negocio.PersonaSOA.graficar();
	}

	/**
	 * Metodo que hace una busqueda de un registro en la BD, segun su nombre o
	 * rut.
	 * 
	 * @param buscar, parametro que sirve para realizar la busquedadel registro ya sea nombre o rut de persona.
	 * @return message,devuelve el resultado de la operacion.
	 */
	@GET
	@Path("/find/{buscar}")
	@Produces(MediaType.TEXT_PLAIN)
	public static String find(@PathParam("buscar") String buscar) {
		return negocio.PersonaSOA.find(buscar);
	}

	/**
	 * Metodo que sirve para actualizar el nombre de una persona, segun sea su
	 * rut.
	 * 
	 * @param nombre_o_rut, parametro que solicita el nombre o el rut de la persona que se desea actualizar.
	 * @param new_nom, campo donde debe ir el nuevo nombre.
	 * @return
	 */
	@PUT
	@Path("/update")
	public static String update(@FormParam("nombre_o_rut") String nombre_o_rut,
			@FormParam("campo") int campo,
			@FormParam("nuevo_nombre") String new_nom) {
		return negocio.PersonaSOA.update(nombre_o_rut, campo, new_nom);
	}

	/**
	 * Metodo que busca todos los registros de personas, si se ingresa un filtro
	 * busca segun este (nombre, rut, id)
	 * 
	 * @param buscar, parametro que filtra la busqueda segun nombre, rut o id.
	 * @return
	 */
	@GET
	@Path("/findall/{buscar}")
	@Produces(MediaType.APPLICATION_JSON)
	public static Collection<PersonaSOAPVO> findall(@PathParam("buscar") String buscar) {
		return negocio.PersonaSOA.findall(buscar);

	}

}
